/**
 * ReportGear(2011)
 */
package com.reportgear.report.model.script.function;

/**
 * 函数接口，所有支持的函数必须实现该接口，函数名的名称首字母必须小写
 * 
 * @version 1.0 2011-4-10
 * @author <a herf="lexloo@gmail.com">lexloo</a>
 * @since ReportGear 1.0
 */
public interface Function extends Comparable<Function> {
	/**
	 * 函数分类
	 * 
	 */
	public enum Type {
		/**
		 * 数学函数
		 */
		MATH("数学函数"),
		/**
		 * 文本函数
		 */
		TEXT("文本函数"),
		/**
		 * 数组
		 */
		ARRAY("数组"),
		/**
		 * 日期和时间函数
		 */
		DATETIME("日期和时间函数");

		private String typeDesc;

		Type(String typeDesc) {
			this.typeDesc = typeDesc;
		}

		@Override
		public String toString() {
			return typeDesc;
		}
	}

	/**
	 * 函数计算
	 * 
	 * @param args
	 *            参数
	 * @return 返回值
	 */
	public Object exec(Object[] args);

	/**
	 * @return 描述信息
	 */
	public String getDescription();

	/**
	 * @return 获取函数分类
	 */
	public Type getType();

	/**
	 * @return 名称
	 */
	public String getName();
}
